import logging.handlers
import logging
import os

from config.config import BASE_DIR


def initial_log(filename=f'{BASE_DIR}/log/app_auto.log', when='midnight', interval=1, backupCount=7):
    # 确保日志目录存在
    log_dir = os.path.dirname(filename)
    if not os.path.exists(log_dir):
        os.makedirs(log_dir)

    if not os.path.exists(filename):
        with open(filename, 'w') as f:
            pass  # 创建空文件
    # 1. 创建日志器对象
    logger = logging.getLogger()
    # 2. 设置日志打印级别
    logger.setLevel(logging.INFO)
    # logging.DEBUG 调试级别
    # logging.INFO 信息级别
    # logging.WARNING 警告级别
    # logging.ERROR 错误级别
    # logging.CRITICAL 严重错误级别
    # 3.1 创建 输出到控制台 处理器对象
    st = logging.StreamHandler()
    # 3.2 创建 输出到日志文件 处理器对象
    fh = logging.handlers.TimedRotatingFileHandler(
        filename=filename,
        when=when,
        interval=interval,
        backupCount=backupCount,
        encoding='utf-8'
    )
    # when 字符串，指定日志切分间隔时间的单位。midnight：凌晨：12点。
    # interval 是间隔时间单位的个数，指等待多少个 when 后继续进行日志记录
    # backupCount 是保留日志文件的个数
    # 4. 创建日志信息格式
    fmt = "%(asctime)s %(levelname)s [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s"
    formatter = logging.Formatter(fmt)

    # 5.1 日志信息格式 设置给 控制台处理器
    st.setFormatter(formatter)
    # 5.2 日志信息格式 设置给 日志文件处理器
    fh.setFormatter(formatter)
    # 6.1 给日志器对象 添加 控制台处理器
    logger.addHandler(st)
    # 6.2 给日志器对象 添加 日志文件处理器
    logger.addHandler(fh)

